﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SIBI.Models;

namespace SIBI.Controllers
{ 
    public class ControlCorreoController : Controller
    {
        private SIBIContext db = new SIBIContext();

        //***********************************************************************************//
        // Autor:  									                	     				*//
		//***********************************************************************************//
		// Index()													 						*//
		// Función que devuelve la vista de todos los ítems de Control Correo listados en la*//
		// pantalla.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 		None                                   							*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos las Control Correo listadas.			 			*//
		// _________________________________________________________________________________*//
        public ViewResult Index()
        {
            var controlcorreos = (from m in db.ControlCorreos
                                select m).ToList();
            foreach(var fila in controlcorreos)
            {
                if (fila.ccor.Length > 24)
                {
                    fila.ccor = fila.ccor.Substring(0, 25) + "...";
                }
            }
            return View(controlcorreos);
        }

        //***********************************************************************************//
        // Autor:  								                		     				*//
		//***********************************************************************************//
		// Details()	Acceso INVITADO	y ADMINISTRADOR										*//
		// Función que devuelve la vista de los detalles de un Control Correo especificado.	*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador del Control Correo que se desea ver los detalles. 		*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos los datos del Control Correo desado.				*//
		// _________________________________________________________________________________*//
        public ViewResult Details(int id)
        {
            ControlCorreo controlcorreo = db.ControlCorreos.Find(id);
            return View(controlcorreo);
        }

		//***********************************************************************************//
        // Autor:  								                		     				*//
		//***********************************************************************************//
		// Create()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite crear un Control Correo especificado. 	*//
		// Método GET.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 		none															*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee la plantilla para crear el Control Correo desado.		*//
		// _________________________________________________________________________________*//
        public ActionResult Create()
        {
            ViewBag.CausaMovimientoId = new SelectList(db.CausaMovimientoes, "CausaMovimientoId", "cnom");
            return View();
        } 


		//***********************************************************************************//
        // Autor:  									                	     				*//
		//***********************************************************************************//
		// Create()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite crear un Control Correo especificado. 	*//
		// Método POST.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	controlcorreo: dato de tipo modelo, que representa un controlcorreo, este es*//
		//		requerido para verificar que los datos suministrados son correctos,  para 	*//
		// 		así crear o enviar un mensaje de error en la aplicación. 					*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la Control Correo creada.							*//
		// _________________________________________________________________________________*//
        [HttpPost]
        public ActionResult Create(ControlCorreo controlcorreo)
        {
            if (ModelState.IsValid)
            {
                db.ControlCorreos.Add(controlcorreo);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            ViewBag.CausaMovimientoId = new SelectList(db.CausaMovimientoes, "CausaMovimientoId", "cnom", controlcorreo.CausaMovimientoId);
            return View(controlcorreo);
        }
        
		//***********************************************************************************//
        // Autor:  								                		     				*//
		//***********************************************************************************//
		// Edit()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite editar un Control Correo especificado. 	*//
		// Método GET.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la Control Correo que se desea editar.					*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee la plantilla para editar el Control Correo desado.		*//
		// _________________________________________________________________________________*//
        public ActionResult Edit(int id)
        {
            ControlCorreo controlcorreo = db.ControlCorreos.Find(id);
            ViewBag.CausaMovimientoId = new SelectList(db.CausaMovimientoes, "CausaMovimientoId", "cnom", controlcorreo.CausaMovimientoId);
            return View(controlcorreo);
        }

		//***********************************************************************************//
        // Autor:  									                	     				*//
		//***********************************************************************************//
		// Edit()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite Editar un Control Correo especificado. 	*//
		// Método POST.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	controlcorreo: dato de tipo modelo, que representa un controlcorreo, este es*//
		//		requerido para verificar que los datos suministrados son correctos,  para 	*//
		// 		así Editar o enviar un mensaje de error en la aplicación. 					*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que devuelve la Control Correo editada.							*//
		// _________________________________________________________________________________*//
        [HttpPost]
        public ActionResult Edit(ControlCorreo controlcorreo)
        {
            if (ModelState.IsValid)
            {
                db.Entry(controlcorreo).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.CausaMovimientoId = new SelectList(db.CausaMovimientoes, "CausaMovimientoId", "cnom", controlcorreo.CausaMovimientoId);
            return View(controlcorreo);
        }

		//***********************************************************************************//
        // Autor:  									                	     				*//
		//***********************************************************************************//
		// Delete()	Acceso solo ADMINISTRADOR												*//
		// Acción que devuelve la vista que permite eliminar un Control Correo especificado.*//
		// Método GET.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la Control Correo que se desea eliminar.				*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee la plantilla para eliminar el Control Correo desado.	*//
		// _________________________________________________________________________________*//
        public ActionResult Delete(int id)
        {
            ControlCorreo controlcorreo = db.ControlCorreos.Find(id);
            return View(controlcorreo);
        }

		//***********************************************************************************//
        // Autor:  									                	     				*//
		//***********************************************************************************//
		// DeleteConfirmed()	Acceso solo ADMINISTRADOR									*//
		// Acción que devuelve la vista que permite elimininar Control Correo especificado. *//
		// Método POST.																		*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador del Control Correo que va a eliminar.						*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que muestra la eliminación del Control Correo desado.				*//
		// _________________________________________________________________________________*//
        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {            
            ControlCorreo controlcorreo = db.ControlCorreos.Find(id);
            db.ControlCorreos.Remove(controlcorreo);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}